package com.eugenema.util.ExcelUtil;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.converters.ReadConverterContext;
import com.alibaba.excel.converters.WriteConverterContext;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.HyperlinkData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.eugenema.entity.Team;

/**
 * “球队”字段转换器
 * 将读取到的数据转成实体类
 *
 * @author Eugenema
 * @date 2023/3/5 17:15
 */
public class TeamConverter implements Converter<Team> {
    /**
     * 返回 Excel 读取到的数据，对应 Java 中的属性类型
     *
     * @author Eugenema
     * @date 2023/3/5 17:18
     *
     *
     * @return 属性类型
     **/
    @Override
    public Class<?> supportJavaTypeKey() {
        return Team.class;
    }

    /**
     * 返回 Excel 读取到的数据类型
     *
     * @author Eugenema
     * @date 2023/3/5 17:18
     *
     *
     * @return Excel 内部数据类型
     **/
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    /**
     * 将文本封装进实体类 Team，超链接在监听类中进行读取
     * 读数据时调用
     *
     * @author Eugenema
     * @date 2023/3/5 17:22
     *
     * @param context 读取转换器上下文对象
     *
     * @return 转换后的值
     **/
    @Override
    public Team convertToJavaData(ReadConverterContext<?> context) {
        String cellContext = context.getReadCellData().getStringValue();
        Team team = new Team();
        team.setName(cellContext);
        return team;
    }

    /**
     * 将实体类转成带有超链接的单元格
     * 写数据时调用
     *
     * @author Eugenema
     * @date 2023/3/5 17:28
     *
     * @param context 写转换器上下文对象
     *
     * @return 写入的值
     **/
    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<Team> context) {
        HyperlinkData hyperlinkData = new HyperlinkData();
        hyperlinkData.setAddress(context.getValue().getLink());
        hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);
        WriteCellData<String> writeCellData = new WriteCellData<>(context.getValue().getName());
        writeCellData.setHyperlinkData(hyperlinkData);
        return writeCellData;
    }
}
